NPC - Script

';' Regel
Anweisungen mit () z.B. w(1000) brauchen kein ';' am Ende. Zuweisungen (r1=1;)
und '++',' --', (++r1;) enden mit ';' .

Kommentar:
//.....: nur bis zum Ende der Zeile.
/* von */ bis: auch über mehrere Zeilen.

[] Index:
Die Nummer der Variable kann mit anderen Variablen indexiert werden.

Beispiel:

b1=1;
//---- Schleife b1=1 - b1=8 ------
:1
f[b1]=b1+5; //.....Es werden f1 bis f8 zugewiesen.
++b1;
if(b1<9)go(1)


if - Abfrage
if( expr) stat e stat; ?(expr)...
expr= [Nicht]Variable (Vergleich (Variable|Zahl) [Logik])*.
Beispiel:
if(f1)f2=2;expr(f1) '0' = False; '>=1' = True;
if(~i1)f2=2;'~' = Verneinung (nicht bei float)
if(r7!=1)r8=0; e r8=1;'e' = else;
?(b1=3 & i2=-1 | r1=1)f2=2; '( )' in expr nicht möglich
 
: Adresse
0-9 Sprunga-z Unterprogramm
max. 10max. 10
Beispiel:
go(3) ... :3 ++i1; ...a{......} go(a)
 
:I{}

Interrupt ( Unterbrechung ) erhöht die Echtzeit- (Real-time) Fähigkeit des Scripts. Die Reaktion des Programms auf Änderungen der Hardware wird durch lange Programme oder Warte-Befehle wie w() oder pg() verlangsamt. Interrupt (wie ein Unterprogramm aufgebaut) wird nach jeder Programmzeile oder in Warte-Befehlen ausgeführt. Variable it bestimmt die Zeitabstände. Wird it nicht bestimmt oder ist it=0, wird das Interrupt so oft wie möglich ausgeführt.
Warte-Befehle wie w() oder pg() sollten hier vermieden werden. Auch lange Programm-Ketten sind nicht ratsam wenn it klein ist.

Beispiel:
it=2500; //2,5 Sek.
:I{p1=~p1;} ...
 
go(Adresse[ohne:])
0-9 Sprunga-z Unterprogramm aufrufen.
max. 10max. 10
Beispiel:
go(3) ... :3 ++i1; ...:c{...[ret;]...} go(c) ...
 
ret;
Return (Rücksprung) aus dem Unterprogramm. Unterbricht das Unterprogramm an beliebiger Stelle. Am Ende des Unterprogramms ist ret; nicht notwendig.
Beispiel:
:c{...[ret;]...} go(c) ... 
 
w(zahl|Var) Warten in ms
Wartefunktion in Millisekunden. Die Programmausführung wird für die Zeit gestoppt. Zahl (0-65535) oder Variable als Parameter. Min. Zeit 10 ms.
Beispiel:
i2=1000; w(i2)......w(2500)
 
pg(IP) Ping an die IP senden
Das Ergebnis wird in der pg Variablen gespeichert.
'-1' keine Antwort
'>0' Antwortzeit in ms.
Die IP wird gespeichert. Bei zweitem Aufruf und gleicher IP reicht nur pg().
Beispiel:
pg(192.168.0.25) if(pg>0)...//empfangen;
 
udp(IP,Port,String) UDP String an die IP senden
IP z.B.: 192.168.178.85
Port: Zahl|Var. Variablen werden in Int (16Bit) Format umgewandelt
String: 'Zeichenkette' [/zahl (ASCII Zeichen)] [Var] [/Var (Variable binär)]
/Var - (Variable binär) wandelt die Var nicht in ASCII um, sondern sendet die binär Werte je nach Größe 1-4 Byte: wenn u1=1; wird nicht 49 (ASCII '1') sondern 1 gesendet.
Die IP und Port werden gespeichert. Bei zweitem Aufruf und gleicher IP und Port reicht nur udp('....').
Beispiel:
f2=65000; u1=1; udp(192.168.178.85,f2,'test '/u1\42' test weiter')

 

String - max. 64 zeichen
f1.3 (0-9) - float Nachkommastellen

/Var Bytes gesendet - Big Endian
\70
/Var

BYTE, Boolean
Integer
Float
ASCII-Zeichen (z.B. \70= F)
sendet Variable im Binär Format.

 1 Byte
 2 Bytes
 4 Bytes
 
@() E-Mail Adresse
Die E-Mail Adresse wird festgelegt. Der Printbuffer wird an die Adresse durch das Befehl p(\@) per E-Mail versendet.
Die E-Mail-Einstellung muss konfiguriert sein (Einstellung/E-Mail).
Beispiel:
@(info@anel-elektronik.de)
 
p() - Print - Drucken
Es wird in den Printbuffer ausgegeben. Der Printbuffer (1024 Byte) kann oben in der Steuerung angezeigt oder per E-Mail gesendet werden.
p(expr)
expr= '...' [\..][Var]['..']
Beispiel:
p('<tr><td>Version = 'v.1'<td>Temperatur = 't.2'°C')

p(h#2':'m#2':'s#2)

Print Buffer = 1024 Byte

f1.3  (0-9) - float Nachkommastellen
i1#3 (0-9) - mit Nullen füllen (nicht float)

String - max. 64 zeichen
E-Mail Adress - max. 48 zeichen>
\b
\f
\"
\'
\?
\s
\\
\70
\p25
\@
(backspace) = ein Zeichen zurück.
(form feed) =  Cursor auf Anfang (\p0).
= "
= '
= ?
space (HTML: &#160; oder &nbsp;).
= \
ASCII-Zeichen (z.B. \70= F)
position im Buffer
E-Mail senden